package study.JavaBase;

/**
 * date:2025.10.16
 * title:接口
 * author:fzy
 */
public class Java_22 {
    public static void main(String[] args) {
        int a = midSchool.num;
    }
}
//接口是一个抽象类型，抽象方法的集合
//除非实现接口的是抽象类，否则必须实现这个接口的所有方法
//接口的每个方法都是隐士抽象的，类似于public abstract
//接口可以含有变量，但是接口的变量会隐式指定为 public abstract final
//接口中不能含有非抽象方法，抽象类不一样
//接口不能直接实例化，但是可以使用多态的形式用向下转型实例化
//接口的成员变量是静态修饰的
//Object是所有类的超类


//接口允许继承，并且允许多继承
interface bigSchool {
    //接口定义的变量，默认为静态的
    String schoolName = "big";

    void goBigSchool();

    void leaveBigSchool();
}

interface midSchool {
    int num = 40;

    void goMidSchool();

    void leaveMidSchool();
}

interface School extends bigSchool, midSchool {
    void goSchool();

    void leaveSchool();

    String study();
}

interface Work {
    void goWork();

    void leaveWork();

    int getMoney();
}

abstract class Person_one {
    String name;
    int age;
    String sex;

    public Person_one(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    abstract void oneDay();
}

//JavaBase.MaryClass 继承了抽象父类以及实现了两个接口
class MaryClass extends Person_one implements School, Work {
    MaryClass(String name, int age, String sex) {
        super(name, age, sex);
    }

    @Override
    void oneDay() {

    }

    @Override
    public void goSchool() {
        String a = bigSchool.schoolName;
    }

    @Override
    public void leaveSchool() {
    }

    @Override
    public String study() {
        return "knowledge";
    }

    @Override
    public void goWork() {
    }

    @Override
    public void leaveWork() {
    }

    @Override
    public int getMoney() {
        return 0;
    }

    @Override
    public void goMidSchool() {

    }

    @Override
    public void leaveMidSchool() {
    }

    @Override
    public void goBigSchool() {
    }

    @Override
    public void leaveBigSchool() {
    }
}

//标记接口
//没有包含任何属性或者方法
//主要用来1.接口api分组，2.像一个类中添加数据类型

//抽象类和接口设计上的区别
//门和警报
//无论什么们都有开关的两个动作，这个时候我们可以分别使用抽象类和接口定义
//有的门不可以报警，所以设计一个报警接口，让可以报警的门实现这个接口

//案例
interface studyEnglish{
    void useEnglish();
}

interface PingPong{
    void playPingPong();
}
interface basketBall{
    void playBaskBall();
}

abstract class Athlete{
    abstract void idCard();
}

class PingPongAthlete extends Athlete implements PingPong,studyEnglish{
    @Override
    void idCard() {

    }

    @Override
    public void playPingPong() {

    }

    @Override
    public void useEnglish() {

    }
}

